package com.zut.chat.dto;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * WebSocket消息传输对象
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class WebSocketMessage {
    
    /**
     * 消息类型
     */
    private MessageType type;
    
    /**
     * 发送者昵称
     */
    private String senderNickname;
    
    /**
     * 消息内容
     */
    private String content;
    
    /**
     * 发送时间
     */
    private LocalDateTime timestamp;
    
    /**
     * 在线用户数
     */
    private Integer onlineCount;
    
    /**
     * 会话ID
     */
    private String sessionId;
    
    /**
     * 图片URL（当消息类型为IMAGE时使用）
     */
    private String imageUrl;
    
    /**
     * 礼物名称（当消息类型为GIFT时使用）
     */
    private String giftName;
    
    /**
     * 礼物图标URL（当消息类型为GIFT时使用）
     */
    private String giftIcon;
    
    /**
     * 礼物动画URL（当消息类型为GIFT时使用）
     */
    private String giftAnimation;
    
    /**
     * 礼物价值（当消息类型为GIFT时使用）
     */
    private Integer giftValue;
    
    /**
     * 视频URL（当消息类型为VIDEO时使用）
     */
    private String videoUrl;
    
    /**
     * 视频标题（当消息类型为VIDEO时使用）
     */
    private String videoTitle;
    
    /**
     * 视频缩略图URL（当消息类型为VIDEO时使用）
     */
    private String videoThumbnail;
    
    /**
     * 在线用户列表（当消息类型为ONLINE_USERS时使用）
     */
    private java.util.List<OnlineUserInfo> onlineUsers;
    
    /**
     * 目标用户会话ID（管理员操作时使用）
     */
    private String targetSessionId;
    
    /**
     * 操作结果（管理员操作时使用）
     */
    private Boolean operationResult;
    
    /**
     * 操作消息（管理员操作时使用）
     */
    private String operationMessage;
    
    /**
     * 在线用户信息
     */
    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class OnlineUserInfo {
        private String sessionId;
        private String nickname;
        private String userType;
        private java.time.LocalDateTime lastActiveTime;
    }
    
    /**
     * 消息类型枚举
     */
    public enum MessageType {
        /**
         * 普通文本消息
         */
        TEXT,
        
        /**
         * 图片消息
         */
        IMAGE,
        
        /**
         * AI机器人消息
         */
        AI_ROBOT,
        
        /**
         * 系统消息
         */
        SYSTEM,
        
        /**
         * 用户加入
         */
        JOIN,
        
        /**
         * 用户离开
         */
        LEAVE,
        
        /**
         * 在线用户数更新
         */
        ONLINE_COUNT,
        
        /**
         * 礼物消息
         */
        GIFT,
        
        /**
         * 获取在线用户列表请求
         */
        GET_ONLINE_USERS,
        
        /**
         * 在线用户列表响应
         */
        ONLINE_USERS,
        
        /**
         * 管理员操作：踢出用户
         */
        ADMIN_KICK_USER,
        
        /**
         * 管理员操作结果
         */
        ADMIN_OPERATION_RESULT,
        
        /**
         * 管理员禁言用户
         */
        ADMIN_BAN_USER,
        
        /**
         * 管理员解除禁言
         */
        ADMIN_UNBAN_USER,
        
        /**
         * 频率限制警告
         */
        RATE_LIMIT_WARNING,
        
        /**
         * 视频消息
         */
        VIDEO
    }
}
